package br.com.rentalcar.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

import com.mysql.fabric.xmlrpc.base.Array;

import br.com.rentalcar.domain.Carro;
import br.com.rentalcar.domain.Categoria;
import br.com.rentalcar.factory.ConexaoFactory;

public class CarroDao {

	public void salvar(Carro carro) throws SQLException {

		StringBuilder sql = new StringBuilder();
		sql.append("INSERT INTO carro ");
		sql.append("(placa, fabricante, marca, modelo, categoria_idcategoria ) ");
		sql.append("VALUES(?, ?, ?, ?, ? ) ");

		Connection conexao = ConexaoFactory.conectar();

		PreparedStatement comando = conexao.prepareStatement(sql.toString());

		comando.setString(1, carro.getPlaca());
		comando.setString(2, carro.getFabricante());
		comando.setString(3, carro.getMarca());
		comando.setString(4, carro.getModelo());
		comando.setLong(5, carro.getCategoria().getIdCategoria());
		comando.executeUpdate();
	}

	public ArrayList<Carro> lista() throws SQLException {
		StringBuilder sql = new StringBuilder();

		sql.append("SELECT  c.idcarro, c.placa, c.fabricante, c.marca, c.modelo, c.categoria_idcategoria, t.idcategoria ,t.descricao ");
		sql.append("FROM carro c , categoria t ");
		sql.append("WHERE c.categoria_idcategoria=t.idcategoria ");

		Connection conexao = ConexaoFactory.conectar();

		PreparedStatement comando = conexao.prepareStatement(sql.toString());

		ResultSet resultado = comando.executeQuery();

		ArrayList<Carro> carro = new ArrayList<Carro>();

		while (resultado.next()) {
			Categoria categoria = new Categoria();

			categoria.setIdCategoria(resultado.getLong("t.idcategoria"));
			categoria.setDescricao(resultado.getString("t.descricao"));

			Carro c = new Carro();
			c.setIdcarro(resultado.getLong("c.idcarro"));
			c.setPlaca(resultado.getString("c.placa"));
			c.setFabricante(resultado.getString("c.fabricante"));
			c.setMarca(resultado.getString("c.marca"));
			c.setModelo(resultado.getString("c.modelo"));
			c.setCategoria(categoria);

			carro.add(c);

		}
		return carro;

	}

	public void excluir(Carro c) throws SQLException {

		StringBuilder sql = new StringBuilder();
		sql.append("DELETE FROM carro ");
		sql.append("WHERE idcarro = ?");

		Connection conexao = ConexaoFactory.conectar();

		PreparedStatement comando = conexao.prepareStatement(sql.toString());

		comando.setLong(1, c.getIdcarro());

		comando.executeUpdate();
	}

	public void editar(Carro c) throws SQLException {

		StringBuilder sql = new StringBuilder();
		sql.append("UPDATE carro ");
		sql.append("SET placa = ?, fabricante = ?, marca = ?, modelo = ?, categoria_idcategoria = ?  ");
		sql.append("WHERE idcarro = ? ");

		Connection conexao = ConexaoFactory.conectar();

		PreparedStatement comando = conexao.prepareStatement(sql.toString());

		comando.setString(1, c.getPlaca());
		comando.setString(2, c.getFabricante());
		comando.setString(3, c.getMarca());
		comando.setString(4, c.getModelo());
		comando.setLong(5, c.getCategoria().getIdCategoria());
		comando.setLong(6, c.getIdcarro());

		comando.executeUpdate();
	}

	public Carro recuperarCarro(Long idCarro) {
		Carro cr = new Carro();

		try {

			Connection conn = ConexaoFactory.conectar();
			PreparedStatement smt = conn.prepareStatement("SELECT idcarro, placa, fabricante, marca, modelo, categoria_idcategoria FROM carro WHERE idcarro=? ");

			smt.setLong(1, idCarro);
			ResultSet rs = smt.executeQuery();
			cr = new Carro();
			Categoria ct = new Categoria();
			
			while (rs.next()) {
				cr.setIdcarro(rs.getLong(1));
				cr.setPlaca(rs.getString(2));

				cr.setFabricante(rs.getString(3));
				cr.setMarca(rs.getString(4));
				cr.setModelo(rs.getString(5));

				ct.setIdCategoria(rs.getLong(6));
				cr.setCategoria(ct);
			}

		} catch (Exception e) {
			System.out.println("Erro na consulta "+e.getMessage());
			
		}

		return cr;
	}
}
